home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 1 / Cream of the Crop 1.iso / PROGRAM / GUI_LIBR.ARJ / DEMO.C < prev    next >
C/C++ Source or Header  |  1992-08-12  |  17KB  |  635 lines

  1. #include <graphics.h>
  2. #include <stdlib.h>
  3. #include <stdio.h>
  4. #include <conio.h>
  5. #include "gui_lib.h"
  6.  
  7. #define BKG     3
  8.  
  9. //***************************DEMO FUNCTIONS*********************************
  10. void buttondemo();
  11. void graphbuttondemo();
  12. void paneldemo();
  13. void icondemo();
  14. void acticondemo();
  15. void menudemo();
  16. void inputdemo();
  17. void finale();
  18.  
  19. //************************SUPPORTING FUNCTIONS******************************
  20. void write3d(int,char *);
  21. void early_exit();
  22. void norm_exit();
  23. void do_siren();
  24. void do_tele();
  25.  
  26. //**************************GLOBAL VARIABLES********************************
  27. char ch; //generic character variable
  28.  
  29. //**************************************************************************
  30. //**************************************************************************
  31. //**************************************************************************
  32.  
  33. void main()
  34. {
  35.     int gd=VGA,gm=VGAHI;
  36.     int errorcode;
  37.  
  38.     if(!mouse_init()) {
  39.         puts("Unable to detect mouse driver");
  40.         exit(1);
  41.         }
  42.  
  43.     initgraph(&gd,&gm,"");
  44.     errorcode=graphresult();
  45.     if(errorcode!=grOk) {
  46.         puts("Could not establish 640 x 480 16 color graphics mode");
  47.         exit(1);
  48.         }
  49.     delay(1000);
  50.  
  51.     setfillstyle(SOLID_FILL,BKG);
  52.     bar(0,0,getmaxx(),getmaxy());
  53.  
  54.     Bevel mainpanel;
  55.  
  56.     mainpanel.init(50,75,540,125,THICK);
  57.     mainpanel.show();
  58.  
  59.     settextjustify(CENTER_TEXT,TOP_TEXT);
  60.     write3d(100,"DOS based GUI_LIB library demonstration for Borland C++ and");
  61.     write3d(115,"Turbo C++. This demo and the included graphics library file(s)");
  62.     write3d(130,"were written by David Reinhart of Ludicrous Data - 1992");
  63.  
  64.     write3d(160,"Press the <ENTER> key or the right mouse key to progress through");
  65.     write3d(175,"the demo.");
  66.  
  67.     Panel copyrightpanel;
  68.     copyrightpanel.init(3,455,634,21,OUT,THIN);
  69.     copyrightpanel.show();
  70.     setcolor(0);
  71.     write3d(465,"(c) Copyright 1992 - Ludicrous Data");
  72.  
  73.     show_cursor();
  74.  
  75.     int selected=0;
  76.     while(!selected) {
  77.         while(!kbhit() && !rightmousekeypressed());
  78.         if(kbhit()) {
  79.             if((ch=getch())==27)
  80.                 early_exit();
  81.             while(kbhit())getch();
  82.             selected=1;
  83.             }
  84.         if(rightmousekeypressed())
  85.             selected=1;
  86.         }
  87.  
  88.  
  89.     buttondemo();
  90.     graphbuttondemo();
  91.     icondemo();
  92.     acticondemo();
  93.     paneldemo();
  94.     menudemo();
  95.     inputdemo();
  96.     finale();
  97.     norm_exit();
  98. }
  99.  
  100. //**************************************************************************
  101.  
  102. void buttondemo()
  103. {
  104.     setfillstyle(SOLID_FILL,BKG);
  105.     hide_cursor();
  106.     bar(0,0,getmaxx(),getmaxy()-40);
  107.  
  108.  
  109.     Bevel mainpanel;
  110.     mainpanel.init(30,70,580,230,THICK);
  111.     mainpanel.show();
  112.  
  113.     write3d(85,"Buttons are one of the most fundamental graphic objects.");
  114.     write3d(100,"They are very popular within graphics environments");
  115.     write3d(115,"for getting user input. You, the programmer, have complete");
  116.     write3d(130,"control over how these button objects function. That is");
  117.     write3d(145,"to say, whether the resulting action takes place when the");
  118.     write3d(160,"button is pressed or released; how long the button remains");
  119.     write3d(175,"depressed; etc...  Experiment with the buttons below.");
  120.  
  121.     Button lowbutton;
  122.     Button medbutton;
  123.     Button hibutton;
  124.     Panel buttonpanel;
  125.  
  126.     lowbutton.init(150,230," LOW ",TEXT);
  127.     medbutton.init(300,230," MED ",TEXT);
  128.     hibutton.init(450,230," HI  ",TEXT);
  129.     buttonpanel.init(130,220,390,45,IN,THICK);
  130.     buttonpanel.show();
  131.  
  132.     lowbutton.show();
  133.     medbutton.show();
  134.     hibutton.show();
  135.  
  136.     show_cursor();
  137.     int selected=0;
  138.  
  139.     flushkeys();
  140.     while(!selected) {
  141.         if(leftmousekeypressed()) {
  142.             if(lowbutton.hit()) {
  143.                 lowbutton.press();
  144.                 while(leftmousekeypressed() && lowbutton.hit());
  145.                 lowbutton.show();
  146.                 if(lowbutton.hit()) {
  147.                     sound(220);
  148.                     delay(500);
  149.                     nosound();
  150.                     }
  151.                 }
  152.             if(medbutton.hit()) {
  153.                 medbutton.press();
  154.                 while(leftmousekeypressed() && medbutton.hit());
  155.                 medbutton.show();
  156.                 if(medbutton.hit()) {
  157.                     sound(440);
  158.                     delay(500);
  159.                     nosound();
  160.                     }
  161.                 }
  162.             if(hibutton.hit()) {
  163.                 hibutton.press();
  164.                 while(leftmousekeypressed() && hibutton.hit());
  165.                 hibutton.show();
  166.                 if(hibutton.hit()) {
  167.                     sound(880);
  168.                     delay(500);
  169.                     nosound();
  170.                     }
  171.                 }
  172.             }// end if leftmousekeypressed
  173.         if(rightmousekeypressed()) {
  174.             selected=1;
  175.             }
  176.         if(kbhit()) {
  177.             if((ch=getch())==27)
  178.                 early_exit();
  179.             while(kbhit())getch();
  180.             selected=1;
  181.             }
  182.         }// end while !selected
  183. }
  184.  
  185. //**************************************************************************
  186.  
  187. void graphbuttondemo()
  188. {
  189.     hide_cursor();
  190.     setfillstyle(SOLID_FILL,BKG);
  191.     bar(0,0,getmaxx(),getmaxy()-40);
  192.  
  193.     Bevel mainpanel;
  194.     mainpanel.init(50,50,getmaxx()-100,250,THICK);
  195.     mainpanel.show();
  196.  
  197.     write3d(75,"Buttons can have not only text labels, but graphics as well!");
  198.     write3d(90,"Graphics not only make the interface look nicer, but can");
  199.     write3d(105,"also make the button's function more intuitive for the end user.");
  200.     write3d(120,"Try to guess what the outcome will be before trying out each of");
  201.     write3d(135,"the buttons below.");
  202.     write3d(165,"By the way, these graphic buttons are easy to create using the");
  203.     write3d(180,"ICONEDIT program supplied in this package.");
  204.  
  205.     Panel buttonpanel;
  206.     Button sirenbutton;
  207.     Button telebutton;
  208.  
  209.     buttonpanel.init(270,220,100,50,IN,THICK);
  210.     buttonpanel.show();
  211.     sirenbutton.init(285,235,"siren",1);
  212.     telebutton.init(330,235,"telefone",1);
  213.     sirenbutton.show();
  214.     telebutton.show();
  215.     show_cursor();
  216.  
  217.     flushkeys();
  218.     int selected=0;
  219.     while(!selected) {
  220.         if(rightmousekeypressed())
  221.             selected=1;
  222.         if(kbhit()) {
  223.             if((ch=getch())==27)
  224.                 early_exit();
  225.             while(kbhit())getch();
  226.             selected=1;
  227.             }
  228.         if(leftmousekeypressed()) {
  229.             if(sirenbutton.hit()) {
  230.                 sirenbutton.press();
  231.                 while(leftmousekeypressed() && sirenbutton.hit());
  232.                 sirenbutton.show();
  233.                 if(sirenbutton.hit())
  234.                     do_siren();
  235.                 }
  236.             if(telebutton.hit()) {
  237.                 telebutton.press();
  238.                 while(leftmousekeypressed() && telebutton.hit());
  239.                 telebutton.show();
  240.                 if(telebutton.hit())
  241.                     do_tele();
  242.                 }
  243.             }
  244.         }
  245. }
  246.  
  247. //**************************************************************************
  248.  
  249. void paneldemo()
  250. {
  251.     hide_cursor();
  252.     setfillstyle(SOLID_FILL,BKG);
  253.     bar(0,0,getmaxx(),getmaxy()-40);
  254.  
  255.     Bevel mainpanel;
  256.     mainpanel.init(10,10,getmaxx()-20,70,THICK);
  257.     mainpanel.show();
  258.  
  259.     write3d(25,"Panels offer an attractive way to partition the graphics screen.");
  260.     write3d(40,"Here are some of the different types of panels that can easily");
  261.     write3d(55,"be implemented using the GUI_LIB library.");
  262.  
  263.  
  264.     Panel inthick;
  265.     Panel inthin;
  266.     Panel outthick;
  267.     Panel outthin;
  268.     Bevel thin;
  269.     Bevel thick;
  270.  
  271.     delay(2000);
  272.     write3d(90,"THICK STYLES                               THIN STYLES");
  273.     inthick.init(50,105,200,100,IN,THICK);
  274.     inthick.show();
  275.     inthin.init(390,105,200,100,IN,THIN);
  276.     inthin.show();
  277.     delay(1000);
  278.     outthick.init(50,220,200,100,OUT,THICK);
  279.     outthick.show();
  280.     outthin.init(390,220,200,100,OUT,THIN);
  281.     outthin.show();
  282.     delay(1000);
  283.     thick.init(50,335,200,100,THICK);
  284.     thick.show();
  285.     thin.init(390,335,200,100,THIN);
  286.     thin.show();
  287.  
  288.     show_cursor();
  289.     flushkeys();
  290.     while(!kbhit() && !rightmousekeypressed());
  291.     if(kbhit()) {
  292.         if((ch=getch())==27)
  293.             early_exit();
  294.         while(kbhit())getch();
  295.         }
  296.  
  297. }
  298.  
  299. //**************************************************************************
  300.  
  301. void icondemo()
  302. {
  303.     hide_cursor();
  304.     setfillstyle(SOLID_FILL,BKG);
  305.     bar(0,0,getmaxx(),getmaxy()-40);
  306.  
  307.     Bevel mainpanel;
  308.     mainpanel.init(50,50,getmaxx()-100,200,THICK);
  309.     mainpanel.show();
  310.  
  311.     write3d(75,"What paint program would be complete without icons? Icons are");
  312.     write3d(90,"as intuitive to use as buttons, and once again, using the");
  313.     write3d(105,"ICONEDIT program, they are easy for you, the programmer, to");
  314.     write3d(120,"create. Check out the action of the icons below...");
  315.  
  316.     Panel iconpanel;
  317.     Icon drawicon;
  318.     Icon painticon;
  319.  
  320.     iconpanel.init(250,160,getmaxx()-500,50,IN,THICK);
  321.     iconpanel.show();
  322.     drawicon.init(280,170,"draw");
  323.     painticon.init(330,170,"paint");
  324.     drawicon.show();
  325.     painticon.show();
  326.     show_cursor();
  327.  
  328.     flushkeys();
  329.     int selected=0;
  330.     while(!selected) {
  331.         if(rightmousekeypressed())
  332.             selected=1;
  333.         if(kbhit()) {
  334.             if((ch=getch())==27)
  335.                 early_exit();
  336.             while(kbhit())getch();
  337.             selected=1;
  338.             }
  339.         if(leftmousekeypressed()) {
  340.             if(painticon.hit()) {
  341.                 if(!painticon.ispressed()) {
  342.                     painticon.choose();
  343.                     drawicon.show();
  344.                     }
  345.                 }
  346.             if(drawicon.hit()) {
  347.                 if(!drawicon.ispressed()) {
  348.                     drawicon.choose();
  349.                     painticon.show();
  350.                     }
  351.                 }
  352.             }
  353.         }
  354. }
  355.  
  356. //**************************************************************************
  357.  
  358. void acticondemo()
  359. {
  360.     hide_cursor();
  361.     setfillstyle(SOLID_FILL,BKG);
  362.     bar(0,0,getmaxx(),getmaxy()-40);
  363.  
  364.     Bevel mainpanel;
  365.     mainpanel.init(50,50,getmaxx()-100,300,THICK);
  366.     mainpanel.show();
  367.  
  368.     write3d(75,"Here's a neat graphic feature that you don't see everyday.");
  369.     write3d(90,"Want to really jazz up your interface? Want to make it stand");
  370.     write3d(105,"out in a crowd?! Instead of reversing the image of your icons");
  371.     write3d(120,"when they are selected, make them come to life! Click the icon");
  372.     write3d(135,"below to see what I mean.");
  373.     write3d(165,"And guess what... Right! These icons are also easy to create");
  374.     write3d(180,"using the ICONEDIT program");
  375.  
  376.     Panel iconpanel;
  377.     iconpanel.init(270,230,getmaxx()-(270*2),70,IN,THICK);
  378.     iconpanel.show();
  379.     Acticon aicon;
  380.     aicon.init(305,250,"icon");
  381.     aicon.show(1);
  382.     show_cursor();
  383.  
  384.     int selected=0;
  385.     while(!selected) {
  386.         if(rightmousekeypressed())
  387.             selected=1;
  388.         if(kbhit()) {
  389.             if((ch=getch())==27)
  390.                 early_exit();
  391.             while(kbhit())getch();
  392.             selected=1;
  393.             }
  394.         if(leftmousekeypressed()) {
  395.             if(aicon.hit()) {
  396.                 while(!rightmousekeypressed() && !kbhit())
  397.                     aicon.backforth(2);
  398.                 if(kbhit()) {
  399.                     flushkeys();
  400.                     selected=1;
  401.                     }
  402.                 if(rightmousekeypressed())
  403.                     selected=1;
  404.                 }
  405.             }
  406.         }
  407. }
  408.  
  409. //**************************************************************************
  410.  
  411. void menudemo()
  412. {
  413.     hide_cursor();
  414.     setfillstyle(SOLID_FILL,BKG);
  415.     bar(0,0,getmaxx(),getmaxy()-40);
  416.  
  417.     Bevel mainpanel;
  418.     mainpanel.init(30,50,getmaxx()-60,130,THICK);
  419.     mainpanel.show();
  420.  
  421.     write3d(75,"Do you need to include point and shoot type menu bars in your");
  422.     write3d(90,"applications? No problem! Using the GUI_LIB library makes it a snap");
  423.     write3d(105,"for you to include graphic pulldown menus! See for yourself below.");
  424.     write3d(120,"You may want to note that the way these menus are implemented");
  425.     write3d(135,"requires you to keep the left mouse key pressed until you have made");
  426.     write3d(150,"your selection.");
  427.  
  428.     setfillstyle(SOLID_FILL,15);
  429.     bar(0,200,getmaxx(),210);
  430.     setfillstyle(SOLID_FILL,1);
  431.     bar(0,211,getmaxx(),350);
  432.  
  433.     Gmenubutton menubutton1;
  434.     Gmenubutton menubutton2;
  435.     gitemarray  itemarray1;
  436.     gitemarray  itemarray2;
  437.     Gmenu       gmenu1;
  438.     Gmenu       gmenu2;
  439.  
  440.     strcpy(itemarray1[1],"Item 1");
  441.     strcpy(itemarray1[2],"Item 2");
  442.     strcpy(itemarray1[3],"Item 3");
  443.     strcpy(itemarray1[4],"Item 4");
  444.  
  445.     strcpy(itemarray2[1],"Item 1");
  446.     strcpy(itemarray2[2],"Item 2");
  447.     strcpy(itemarray2[3],"Item 3");
  448.     strcpy(itemarray2[4],"Item 4");
  449.  
  450.     gmenu1.init(0,211,4,itemarray1);
  451.     gmenu2.init(100,211,4,itemarray2);
  452.  
  453.     menubutton1.init(0,200,0,15,15,0,"Menu 1");
  454.     menubutton2.init(100,200,0,15,15,0,"Menu 2");
  455.     menubutton1.show();
  456.     menubutton2.show();
  457.     show_cursor();
  458.  
  459.     int selected=0;
  460.     while(!selected) {
  461.         if(kbhit()) {
  462.             if((ch=getch())==27)
  463.                 early_exit();
  464.             flushkeys();
  465.             selected=1;
  466.             }
  467.         if(rightmousekeypressed())
  468.             selected=1;
  469.         if(leftmousekeypressed()) {
  470.             if(menubutton1.hit()) {
  471.                 menubutton1.press();
  472.                 gmenu1.show();
  473.                 gmenu1.hide();
  474.                 menubutton1.show();
  475.                 }
  476.             if(menubutton2.hit()) {
  477.                 menubutton2.press();
  478.                 gmenu2.show();
  479.                 gmenu2.hide();
  480.                 menubutton2.show();
  481.                 }
  482.             }
  483.         }
  484. }
  485.  
  486. //**************************************************************************
  487.  
  488. void inputdemo()
  489. {
  490.     hide_cursor();
  491.     setfillstyle(SOLID_FILL,BKG);
  492.     bar(0,0,getmaxx(),getmaxy()-40);
  493.  
  494.     Bevel mainpanel;
  495.     mainpanel.init(30,50,getmaxx()-60,150,THICK);
  496.     mainpanel.show();
  497.  
  498.     write3d(75,"Getting text input from a graphic based application used to be");
  499.     write3d(90,"a real hassle... NO MORE! The GUI_LIB includes functions for");
  500.     write3d(105,"laying out text input fields, simulating the text cursor, and");
  501.     write3d(120,"handling the text strings input by the user. Now you can");
  502.     write3d(135,"capture graphic text input as easily as in text mode.");
  503.     write3d(150,"Try out the sample dialog below.");
  504.  
  505.     Panel dialogpanel;
  506.     dialogpanel.init(150,250,getmaxx()-300,85,IN,THICK);
  507.     dialogpanel.show();
  508.  
  509.     setcolor(15);
  510.     settextjustify(LEFT_TEXT,TOP_TEXT);
  511.     gprintxy(170,275,"First Name: ");
  512.     gprintxy(170,305,"Last Name:  ");
  513.  
  514.     Gstring fname;
  515.     Gstring lname;
  516.     fname.init(270,279,20,0);
  517.     lname.init(270,309,20,0);
  518.     fname.show();
  519.     lname.show();
  520.  
  521.     fname.get_input();
  522.     lname.get_input();
  523.  
  524.     flushkeys();
  525.     while(!rightmousekeypressed() && !kbhit());
  526.     if(kbhit()) {
  527.         if((ch=getch())==27)
  528.             early_exit();
  529.         flushkeys();
  530.         }
  531. }
  532.  
  533. //**************************************************************************
  534.  
  535. void finale()
  536. {
  537.     setfillstyle(SOLID_FILL,BKG);
  538.     bar(0,0,getmaxx(),getmaxy()-40);
  539.  
  540.     Bevel mainpanel;
  541.     mainpanel.init(20,50,getmaxx()-40,330,THICK);
  542.     mainpanel.show();
  543.  
  544.     write3d(75,"Impressed?   I hope so! Using the GUI_LIB library objects and");
  545.     write3d(90,"functions makes creating graphic based applications as easy (if");
  546.     write3d(105,"not easier) than their text based counterparts. There are many ");
  547.     write3d(120,"functions included in the library that were not demonstrated here.");
  548.     write3d(135,"I just wanted to hit the highlights and get you excited to dive in.");
  549.     write3d(165,"This library compares favorably to other retail libraries costing");
  550.     write3d(180,"hundreds of dollars. Through the concept of Shareware I am able to");
  551.     write3d(195,"bring this product to you at a much lower cost. What's more,");
  552.     write3d(210,"registered users are entitled to upgrades FREE, not at an additional");
  553.     write3d(225,"upgrade price. You are free to use the library and included files and");
  554.     write3d(240,"programs for 30 days without registering the package. You may not,");
  555.     write3d(255,"however, distribute any works created with the library in any way,");
  556.     write3d(270,"shape or form until you have registered your copy of the product.");
  557.     write3d(285,"If after 30 days you have decided to continue using this package");
  558.     write3d(300,"you must register. Please support not only myself, but all Shareware");
  559.     write3d(315,"authors everywhere by complying with these rules.");
  560.     write3d(345,"Thank you for trying software from LUDICROUS DATA.");
  561.  
  562.     while(!kbhit() && !rightmousekeypressed());
  563.     flushkeys();
  564. }
  565.  
  566. //**************************************************************************
  567.  
  568. void write3d(int y,char *text)
  569. {
  570.     settextjustify(CENTER_TEXT,TOP_TEXT);
  571.     setcolor(0);
  572.     outtextxy(getmaxx()/2,y,text);
  573.     setcolor(15);
  574.     outtextxy((getmaxx()/2)-1,y-1,text);
  575. }
  576.  
  577. //**************************************************************************
  578.  
  579. void do_siren()
  580. {
  581.     int i;
  582.  
  583.     for(i=500;i<1000;i+=7) {
  584.         sound(i);
  585.         delay(12);
  586.         }
  587.     for(i=1000;i>500;i-=7) {
  588.         sound(i);
  589.         delay(12);
  590.         }
  591.     nosound();
  592. }
  593.  
  594. //**************************************************************************
  595.  
  596. void do_tele()
  597. {
  598.     int i;
  599.  
  600.     for(i=0;i<14;i++) {
  601.         sound(440);
  602.         delay(30);
  603.         sound(880);
  604.         delay(30);
  605.         }
  606.     nosound();
  607. }
  608.  
  609. //**************************************************************************
  610.  
  611. void early_exit()
  612. {
  613.     closegraph();
  614.     puts("You have not seen the entire demonstration.");
  615.     exit(0);
  616. }
  617.  
  618. //**************************************************************************\
  619.  
  620. void norm_exit()
  621. {
  622.     closegraph();
  623.     printat(1,1,14,0,"Thank you for previewing the GUI_LIB from Ludicrous Data");
  624.     printat(1,3,14,0,"Please read the enclosed documentation for complete instructions");
  625.     printat(1,4,14,0,"on using these objects and functions in your programs. Please note");
  626.     printat(1,5,14,0,"that this package is complete and not crippled or restricted");
  627.     printat(1,6,14,0,"in any way. If you decide to use this library in your own programs");
  628.     printat(1,7,14,0,"you must register your copy with the author. Failure to do so will");
  629.     printat(1,8,14,0,"bring about severe penalties. Use the registration form supplied");
  630.     printat(1,9,14,0,"in the file \"REGISTER.DOC\" to register your copy.");
  631.     printat(1,11,14,0,"Again, thank you and happy programming.");
  632.     gotoxy(1,13);
  633. }
  634.  
  635.